package com.zjm.json.util;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.Map;

/**
 * @author ZJM
 * @date 2024/4/18 21:37
 */
public class GsonUtils {

    private static final Gson gson = new Gson();

    /**
     * 将JSON字符串转换为Map
     *
     * @param json JSON字符串
     * @return Map对象
     */
    public static Map<String, Object> jsonToMap(String json) {
        Type type = new TypeToken<Map<String, Object>>() {
        }.getType();
        return gson.fromJson(json, type);
    }

    /**
     * 将Map转换为JSON字符串
     *
     * @param map Map对象
     * @return JSON字符串
     */
    public static String mapToJson(Map<String, Object> map) {
        return gson.toJson(map);
    }

    /**
     * 将JSON字符串转换为Map<K, V>
     *
     * @param json JSON字符串
     * @return Map<K, V>对象
     */
    public static <K, V> Map<K, V> jsonToMapKV(String json) {
        Type type = new TypeToken<Map<K, V>>() {
        }.getType();
        return gson.fromJson(json, type);
    }

    /**
     * 将Map<K, V>转换为JSON字符串
     *
     * @param map Map<K, V>对象
     * @return JSON字符串
     */
    public static <K, V> String mapToJsonKV(Map<K, V> map) {
        return gson.toJson(map);
    }
}
